#ifndef _LINKQUEUE_H_
#define _LINKQUEUE_H_

#include "DoubleLinkList.hpp"

template <typename T>
class myQueue
{
public:
    myQueue() {}

    void push(const T& data) {
        m_list.InsertTail(data);
    }

    void pop() {
        if (!m_list.Size())
            throw std::runtime_error("队列为空");
        m_list.RemoveHead();
    }

    T& front() {
        if (!m_list.Size())
            throw std::runtime_error("队列为空");
        return m_list.GetHead();
    }

    T& rear() {
        if (!m_list.Size())
            throw std::runtime_error("队列为空");
        typename DoubleLinkList<T>::Node* end = m_list.GetEnd();
        return end->data;
    }

    bool empty() {
        return m_list.Size() == 0;
    }

    int size() {
        return m_list.Size();
    }

private:
    DoubleLinkList<T> m_list;
};


#endif